Struct mz_adapter::catalog::CatalogState

source ·
pub struct CatalogState { /* private fields */ }
Expand description

The in-memory representation of the Catalog. This struct is not directly used to persist metadata to persistent storage. For persistent metadata see mz_catalog::durable::DurableCatalogState.

Serialize is implemented to create human readable dumps of the in-memory state, not for storing the contents of this struct on disk.

Implementations§

source§

impl CatalogState

source

pub fn pack_depends_update( &self, depender: GlobalId, dependee: GlobalId, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_aws_connection_update( &self, connection_id: GlobalId, aws_config: &AwsConnection, diff: Diff ) -> Result<BuiltinTableUpdate, Error>

source

pub fn pack_op_update( &self, operator: &str, func_impl_details: FuncImplCatalogDetails, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_audit_log_update( &self, event: &VersionedEvent, diff: Diff ) -> Result<BuiltinTableUpdate, Error>

source

pub fn pack_storage_usage_update( &self, VersionedStorageUsage::V1: &VersionedStorageUsage, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_egress_ip_update( &self, ip: &Ipv4Addr ) -> Result<BuiltinTableUpdate, Error>

source

pub fn pack_replica_metric_updates( &self, replica_id: ReplicaId, updates: &[ServiceProcessMetrics], diff: Diff ) -> Vec<BuiltinTableUpdate>

source

pub fn pack_all_replica_size_updates(&self) -> Vec<BuiltinTableUpdate>

source

pub fn pack_subscribe_update( &self, id: GlobalId, subscribe: &ActiveSubscribe, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_session_update( &self, conn: &ConnMeta, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_default_privileges_update( &self, default_privilege_object: &DefaultPrivilegeObject, grantee: &RoleId, acl_mode: &AclMode, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_system_privileges_update( &self, privileges: MzAclItem, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_comment_update( &self, object_id: CommentObjectId, column_pos: Option<usize>, comment: &str, diff: Diff ) -> BuiltinTableUpdate

source

pub fn pack_webhook_source_update( &self, source_id: GlobalId, diff: Diff ) -> BuiltinTableUpdate

source§

impl CatalogState

source

pub fn check_consistency(&self) -> Result<(), Box<CatalogInconsistencies>>

Checks the CatalogState to make sure we’re internally consistent.

source§

impl CatalogState

source

pub fn empty() -> Self

source

pub fn for_session<'a>(&'a self, session: &'a Session) -> ConnCatalog<'a>

source

pub fn for_sessionless_user(&self, role_id: RoleId) -> ConnCatalog<'_>

source

pub fn for_system_session(&self) -> ConnCatalog<'_>

source

pub fn dependent_indexes(&self, id: GlobalId) -> Vec<GlobalId>

Computes the IDs of any indexes that transitively depend on this catalog entry.

source

pub fn transitive_uses( &self, id: GlobalId ) -> impl Iterator<Item = GlobalId> + '_

Returns an iterator over the deduplicated identifiers of all objects this catalog entry transitively depends on (where “depends on” is meant in the sense of CatalogItem::uses, rather than CatalogItem::references).

source

pub fn introspection_dependencies(&self, id: GlobalId) -> Vec<GlobalId>

Computes the IDs of any log sources this catalog entry transitively depends on.

source

pub fn resolve_full_name( &self, name: &QualifiedItemName, conn_id: Option<&ConnectionId> ) -> FullItemName

source

pub fn get_entry(&self, id: &GlobalId) -> &CatalogEntry

source

pub fn get_entry_mut(&mut self, id: &GlobalId) -> &mut CatalogEntry

source

pub fn get_item_by_name( &self, name: &QualifiedItemName, conn_id: &ConnectionId ) -> Option<&CatalogEntry>

source

pub fn get_type_by_name( &self, name: &QualifiedItemName, conn_id: &ConnectionId ) -> Option<&CatalogEntry>

source

pub fn try_get_entry(&self, id: &GlobalId) -> Option<&CatalogEntry>

source

pub fn get_role(&self, id: &RoleId) -> &Role

source

pub fn get_roles(&self) -> impl Iterator<Item = &RoleId>

source

pub fn try_get_webhook_url(&self, id: &GlobalId) -> Option<Url>

Returns the URL for POST-ing data to a webhook source, if id corresponds to a webhook source.

Note: Identifiers for the source, e.g. item name, are URL encoded.

source

pub fn parse_view_item(&self, create_sql: String) -> Result<CatalogItem, Error>

Parse a SQL string into a catalog view item with only a limited context.

source

pub fn get_indexes_on( &self, id: GlobalId, cluster: ClusterId ) -> impl Iterator<Item = (GlobalId, &Index)>

Returns all indexes on the given object and cluster known in the catalog.

source

pub fn get_system_configuration(&self, name: &str) -> Result<&dyn Var, Error>

Get system configuration name.

source

pub fn get_schema( &self, database_spec: &ResolvedDatabaseSpecifier, schema_spec: &SchemaSpecifier, conn_id: &ConnectionId ) -> &Schema

source

pub fn get_mz_catalog_schema_id(&self) -> &SchemaId

source

pub fn get_pg_catalog_schema_id(&self) -> &SchemaId

source

pub fn get_information_schema_id(&self) -> &SchemaId

source

pub fn get_mz_internal_schema_id(&self) -> &SchemaId

source

pub fn get_mz_unsafe_schema_id(&self) -> &SchemaId

source

pub fn is_system_schema(&self, schema: &str) -> bool

source

pub fn is_system_schema_id(&self, id: &SchemaId) -> bool

source

pub fn is_system_schema_specifier(&self, spec: &SchemaSpecifier) -> bool

source

pub fn create_temporary_schema( &mut self, conn_id: &ConnectionId, owner_id: RoleId ) -> Result<(), Error>

Creates a new schema in the Catalog for temporary items indicated by the TEMPORARY or TEMP keywords.

source

pub fn resolve_builtin_table(&self, builtin: &'static BuiltinTable) -> GlobalId

Optimized lookup for a builtin table.

Panics if the builtin table doesn’t exist in the catalog.

source

pub fn resolve_builtin_log(&self, builtin: &'static BuiltinLog) -> GlobalId

Optimized lookup for a builtin log.

Panics if the builtin log doesn’t exist in the catalog.

source

pub fn resolve_builtin_source( &self, builtin: &'static BuiltinSource ) -> GlobalId

Optimized lookup for a builtin storage collection.

Panics if the builtin storage collection doesn’t exist in the catalog.

source

pub fn resolve_builtin_object<T: TypeReference>( &self, builtin: &Builtin<T> ) -> GlobalId

Optimized lookup for a builtin object.

Panics if the builtin object doesn’t exist in the catalog.

source

pub fn resolve_builtin_type_references( &self, builtin: &BuiltinType<NameReference> ) -> BuiltinType<IdReference>

source

pub fn config(&self) -> &CatalogConfig

source

pub fn resolve_database( &self, database_name: &str ) -> Result<&Database, SqlCatalogError>

source

pub fn resolve_schema( &self, current_database: Option<&DatabaseId>, database_name: Option<&str>, schema_name: &str, conn_id: &ConnectionId ) -> Result<&Schema, SqlCatalogError>

source

pub fn resolve_system_schema(&self, name: &str) -> SchemaId

Optimized lookup for a system schema.

Panics if the system schema doesn’t exist in the catalog.

source

pub fn resolve_search_path( &self, session: &dyn SessionMetadata ) -> Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>

source

pub fn effective_search_path( &self, search_path: &[(ResolvedDatabaseSpecifier, SchemaSpecifier)], include_temp_schema: bool ) -> Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>

source

pub fn resolve_cluster(&self, name: &str) -> Result<&Cluster, SqlCatalogError>

source

pub fn resolve_builtin_cluster(&self, cluster: &BuiltinCluster) -> &Cluster

source

pub fn resolve_cluster_replica( &self, cluster_replica_name: &QualifiedReplica ) -> Result<&ClusterReplica, SqlCatalogError>

source

pub fn resolve( &self, get_schema_entries: fn(_: &Schema) -> &BTreeMap<String, GlobalId>, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId, err_gen: fn(_: String) -> SqlCatalogError ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves PartialItemName into a CatalogEntry.

If name does not specify a database, the current_database is used. If name does not specify a schema, then the schemas in search_path are searched in order.

source

pub fn resolve_entry( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a non-function CatalogEntry.

source

pub fn resolve_function( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a function CatalogEntry.

source

pub fn resolve_type( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a type CatalogEntry.

source

pub fn system_config(&self) -> &SystemVars

Return current system configuration.

source

pub fn dump(&self) -> Result<String, Error>

Serializes the catalog’s in-memory state.

There are no guarantees about the format of the serialized state, except that the serialized state for two identical catalogs will compare identically.

source

pub fn availability_zones(&self) -> &[String]

source

pub fn concretize_replica_location( &self, location: ReplicaLocation, allowed_sizes: &Vec<String>, allowed_availability_zones: Option<&[String]> ) -> Result<ReplicaLocation, Error>

source

pub fn ensure_not_reserved_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_grantable_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_not_system_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_not_predefined_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn storage_metadata(&self) -> &StorageMetadata

Returns a read-only view of the current StorageMetadata.

To write to this struct, you must use a Transaction, followed by a call to update_storage_metadata.

Trait Implementations§

source§

impl Clone for CatalogState

source§

fn clone(&self) -> CatalogState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl ConnectionResolver for CatalogState

source§

impl Debug for CatalogState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Serialize for CatalogState

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> AsAny for T
where T: Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<R, O, T> CopyOnto<ConsecutiveOffsetPairs<R, O>> for T
where R: Region<Index = (usize, usize)>, O: OffsetContainer<usize>, T: CopyOnto<R>,

source§

fn copy_onto( self, target: &mut ConsecutiveOffsetPairs<R, O> ) -> <ConsecutiveOffsetPairs<R, O> as Region>::Index

Copy self into the target container, returning an index that allows to look up the corresponding read item.
source§

impl<T> DynClone for T
where T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromRef<T> for T
where T: Clone,

source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ProgressEventTimestamp for T
where T: Data + Debug + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts this ProgressEventTimestamp to Any. Read more
source§

fn type_name(&self) -> &'static str

Returns the name of the concrete type of this object. Read more
source§

impl<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<R, T> PushInto<FlatStack<R>> for T
where R: Region + Clone + 'static, T: CopyOnto<R>,

source§

fn push_into(self, target: &mut FlatStack<R>)

Push self into the target container.
source§

impl<T> PushInto<Vec<T>> for T

source§

fn push_into(self, target: &mut Vec<T>)

Push self into the target container.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>

source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> Data for T
where T: Clone + 'static,