harvesthealth's picture
Upload folder using huggingface_hub
f14b4e9 verified
use std::path::PathBuf;
use firm_core::graph::{Query, QueryResult};
use firm_lang::parser::query::parse_query;
use crate::errors::CliError;
use crate::files::load_current_graph;
use crate::ui::{self, OutputFormat};
/// Executes a query against the workspace entity graph.
pub fn query_entities(
workspace_path: &PathBuf,
query_string: String,
output_format: OutputFormat,
) -> Result<(), CliError> {
ui::header("Executing query");
let graph = load_current_graph(workspace_path)?;
// Parse the query
let parsed_query = parse_query(&query_string).map_err(|e| {
ui::error(&format!("Failed to parse query: {}", e));
CliError::QueryError
})?;
// Convert to executable query
let query: Query = parsed_query.try_into().map_err(|e| {
ui::error(&format!("Failed to convert query: {}", e));
CliError::QueryError
})?;
// Execute the query
ui::debug("Executing query");
let result = query.execute(&graph).map_err(|e| {
ui::error(&format!("Query execution failed: {}", e));
CliError::QueryError
})?;
// Output results
match result {
QueryResult::Entities(entities) => {
ui::success(&format!("Query returned {} entities", entities.len()));
match output_format {
OutputFormat::Pretty => ui::pretty_output_entity_list(&entities),
OutputFormat::Json => ui::json_output(&entities),
}
}
QueryResult::Aggregation(agg_result) => match output_format {
OutputFormat::Pretty => ui::raw_output(&agg_result.to_string()),
OutputFormat::Json => ui::json_output(&agg_result),
},
}
Ok(())
}