pub struct PlanCacheKey {
pub hash: u64,
/* private fields */
}Expand description
Query Plan Cache Key
Supports fast lookups using the hash of the query text as the key. Also store query text for conflict detection.
When a plan carries a non-stale PartitionSpec the key includes a
partition fingerprint so that a change in the underlying data layout
(e.g. re-indexing) automatically yields a cache miss, forcing the
planner to produce a fresh physical plan. Callers that only have
the query text (the common lookup path before planning) query with
fingerprint == None, which will not match entries that were stored
with a fingerprint — effectively isolating partitioned plans from the
cache until the caller can provide the current layout version.
Cache key now includes optional space_name and schema_version
to prevent cross-space plan reuse and stale plans after schema changes.
Cache key includes optional param_type_signature so that the
same query text with different parameter type signatures produces a
different key, but different parameter values do not (allowing cached
plan reuse across executions with different values of the same types).
Fields§
§hash: u64Query the hash value of the text
Implementations§
Source§impl PlanCacheKey
impl PlanCacheKey
Sourcepub fn from_query(query: &str) -> Self
pub fn from_query(query: &str) -> Self
Creating Cache Keys from Query Text
Sourcepub fn from_query_with_space(
query: &str,
space_name: Option<String>,
schema_version: Option<u64>,
) -> Self
pub fn from_query_with_space( query: &str, space_name: Option<String>, schema_version: Option<u64>, ) -> Self
Create a key scoped to a specific space and schema version.
param_type_signature is a hash of the parameter types (not
values) so the same query with different param values but same types
reuses the cached plan.
Sourcepub fn from_query_with_full_context(
query: &str,
space_name: Option<String>,
schema_version: Option<u64>,
param_type_signature: Option<u64>,
index_version: Option<u64>,
) -> Self
pub fn from_query_with_full_context( query: &str, space_name: Option<String>, schema_version: Option<u64>, param_type_signature: Option<u64>, index_version: Option<u64>, ) -> Self
Create a key with all available context dimensions.
pub fn from_query_with_context(query: &str, context: PlanCacheContext) -> Self
Sourcepub fn from_query_with_partition(query: &str, spec: &PartitionSpec) -> Self
pub fn from_query_with_partition(query: &str, spec: &PartitionSpec) -> Self
Create a key that additionally captures a physical partition layout, preventing stale cached plans from being reused after layout changes.
Sourcepub fn from_query_with_partition_and_context(
query: &str,
spec: &PartitionSpec,
context: PlanCacheContext,
) -> Self
pub fn from_query_with_partition_and_context( query: &str, spec: &PartitionSpec, context: PlanCacheContext, ) -> Self
Create a partition-scoped key that also carries the full compatibility context (space / schema / index / param types / optimizer / planning config). Used so partitioned plans are invalidated on DDL, cross-space reuse is blocked, and a changed layout fingerprint forces a replan.
Sourcepub fn verify_query(&self, query: &str) -> bool
pub fn verify_query(&self, query: &str) -> bool
Verify that the query text matches (for conflict detection)
Sourcepub fn query_text(&self) -> &str
pub fn query_text(&self) -> &str
Get query text (for debugging or logging)
Sourcepub fn has_partition_fingerprint(&self) -> bool
pub fn has_partition_fingerprint(&self) -> bool
Whether this key holds a partition fingerprint.
Sourcepub fn space_name(&self) -> Option<&str>
pub fn space_name(&self) -> Option<&str>
Return the space name, if any.
Sourcepub fn schema_version(&self) -> Option<u64>
pub fn schema_version(&self) -> Option<u64>
Return the schema version, if any.
Trait Implementations§
Source§impl Clone for PlanCacheKey
impl Clone for PlanCacheKey
Source§impl Debug for PlanCacheKey
impl Debug for PlanCacheKey
impl Eq for PlanCacheKey
Source§impl Hash for PlanCacheKey
impl Hash for PlanCacheKey
Source§impl PartialEq for PlanCacheKey
impl PartialEq for PlanCacheKey
impl StructuralPartialEq for PlanCacheKey
Auto Trait Implementations§
impl Freeze for PlanCacheKey
impl RefUnwindSafe for PlanCacheKey
impl Send for PlanCacheKey
impl Sync for PlanCacheKey
impl Unpin for PlanCacheKey
impl UnsafeUnpin for PlanCacheKey
impl UnwindSafe for PlanCacheKey
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.