use std::sync::Arc;
use super::super::context::ExecutorContext;
#[cfg(test)]
pub use super::query_params::{
combine_explicit_arg_where, compute_projection_reduction, pg_type_to_cast,
};
#[cfg(test)]
pub use super::query_projection::selections_contain_field;
use crate::db::traits::DatabaseAdapter;
#[cfg(test)]
pub use crate::db::{WhereClause, WhereOperator};
pub(in super::super) struct QueryRunner<A: DatabaseAdapter> {
pub(super) ctx: Arc<ExecutorContext<A>>,
}
impl<A: DatabaseAdapter> QueryRunner<A> {
pub(in super::super) const fn new(ctx: Arc<ExecutorContext<A>>) -> Self {
Self { ctx }
}
pub(super) fn extract_inline_node_id(query: &str) -> Option<String> {
let after_node = query.find("node(")?;
let args_region = &query[after_node..];
let after_id = args_region.find("id:")?;
let after_colon = args_region[after_id + 3..].trim_start();
let quote_char = after_colon.chars().next()?;
if quote_char != '"' && quote_char != '\'' {
return None;
}
let inner = &after_colon[1..];
let end = inner.find(quote_char)?;
Some(inner[..end].to_string())
}
}
#[cfg(test)]
#[path = "query_tests.rs"]
mod query_runner_tests;