MCPcopy Create free account
hub / github.com/AmrDeveloper/FileQL / execute_fileql_query

Function execute_fileql_query

src/main.rs:117–194  ·  view source on GitHub ↗
(
    query: String,
    arguments: &Arguments,
    files: &[String],
    env: &mut Environment,
    reporter: &mut DiagnosticReporter,
)

Source from the content-addressed store, hash-verified

115}
116
117fn 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

Callers 2

mainFunction · 0.85
launch_fileql_replFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected