MCPcopy Create free account
hub / github.com/AmrDeveloper/GQL / execute_gitql_query

Function execute_gitql_query

src/main.rs:178–247  ·  view source on GitHub ↗
(
    query: &str,
    arguments: &Arguments,
    repos: &[gix::Repository],
    env: &mut Environment,
    reporter: &mut DiagnosticReporter,
)

Source from the content-addressed store, hash-verified

176}
177
178fn execute_gitql_query(
179 query: &str,
180 arguments: &Arguments,
181 repos: &[gix::Repository],
182 env: &mut Environment,
183 reporter: &mut DiagnosticReporter,
184) {
185 let front_start = std::time::Instant::now();
186 let tokenizer_result = Tokenizer::tokenize(query);
187 if tokenizer_result.is_err() {
188 let diagnostic = tokenizer_result.err().unwrap();
189 reporter.report_diagnostic(query, *diagnostic);
190 std::process::exit(1);
191 }
192
193 let tokens = tokenizer_result.ok().unwrap();
194 if tokens.is_empty() {
195 return;
196 }
197
198 let parser_result = parser::parse_gql(tokens, env);
199 if parser_result.is_err() {
200 let diagnostic = parser_result.err().unwrap();
201 reporter.report_diagnostic(query, *diagnostic);
202 std::process::exit(1);
203 }
204
205 let query_node = parser_result.ok().unwrap();
206 let front_duration = front_start.elapsed();
207
208 let engine_start = std::time::Instant::now();
209 let provider: Box<dyn DataProvider> = Box::new(GitQLDataProvider::new(repos.to_vec()));
210 let evaluation_result = engine::evaluate(env, &provider, query_node);
211 let engine_duration = engine_start.elapsed();
212
213 // Report Runtime exceptions if they exists
214 if evaluation_result.is_err() {
215 let exception = Diagnostic::exception(&evaluation_result.err().unwrap());
216 reporter.report_diagnostic("", exception);
217 std::process::exit(1);
218 }
219
220 let printer: Box<dyn BaseOutputPrinter> = match arguments.output_format {
221 OutputFormatKind::Table => {
222 Box::new(TablePrinter::new(arguments.pagination, arguments.page_size))
223 }
224 OutputFormatKind::JSON => Box::new(JSONPrinter),
225 OutputFormatKind::CSV => Box::new(CSVPrinter),
226 OutputFormatKind::YAML => Box::new(YAMLPrinter),
227 };
228
229 // Render the result only if they are selected groups not any other statement
230 let evaluations_results = evaluation_result.ok().unwrap();
231 for evaluation_result in evaluations_results {
232 let mut rows_count = 0;
233 if let SelectedGroups(mut groups) = evaluation_result
234 && !groups.is_empty()
235 {

Callers 2

mainFunction · 0.85
launch_gitql_replFunction · 0.85

Calls 6

parse_gqlFunction · 0.85
evaluateFunction · 0.85
report_diagnosticMethod · 0.80
is_emptyMethod · 0.45
lenMethod · 0.45
printMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…