#[cfg(test)]
mod tests;
use crate::db::{
cursor::ContinuationSignature,
query::plan::AccessPlannedQuery,
query::{
explain::ExplainPlan,
fingerprint::{finalize_sha256_digest, hash_parts, new_continuation_signature_hasher},
},
};
impl AccessPlannedQuery {
#[must_use]
pub(crate) fn continuation_signature(
&self,
entity_path: &'static str,
) -> ContinuationSignature {
let projection = self.projection_spec_for_identity();
continuation_signature_for_plan_with_projection(self, entity_path, &projection)
}
}
fn continuation_signature_for_plan_with_projection(
plan: &AccessPlannedQuery,
entity_path: &'static str,
projection: &crate::db::query::plan::expr::ProjectionSpec,
) -> ContinuationSignature {
let mut hasher = new_continuation_signature_hasher();
hash_parts::hash_planned_query_profile_with_projection(
&mut hasher,
plan,
hash_parts::ExplainHashProfile::Continuation { entity_path },
projection,
);
ContinuationSignature::from_bytes(finalize_sha256_digest(hasher))
}
impl ExplainPlan {
#[must_use]
pub fn continuation_signature(&self, entity_path: &'static str) -> ContinuationSignature {
let mut hasher = new_continuation_signature_hasher();
hash_parts::hash_explain_plan_profile(
&mut hasher,
self,
hash_parts::ExplainHashProfile::Continuation { entity_path },
);
ContinuationSignature::from_bytes(finalize_sha256_digest(hasher))
}
}