pub struct WorkTable<Row, PrimaryKey, AvailableTypes = (), AvailableIndexes = (), SecondaryIndexes = (), LockType = (), PkGen = <PrimaryKey as TablePrimaryKey>::Generator, const DATA_LENGTH: usize = INNER_PAGE_SIZE, PkNodeType = Vec<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>>>where
PrimaryKey: Clone + Ord + Send + 'static + Hash,
Row: StorableRow + Send + Clone + 'static,
PkNodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,{
pub data: Arc<DataPages<Row, DATA_LENGTH>>,
pub primary_index: Arc<PrimaryIndex<PrimaryKey, DATA_LENGTH, PkNodeType>>,
pub indexes: Arc<SecondaryIndexes>,
pub pk_gen: PkGen,
pub lock_manager: Arc<LockMap<LockType, PrimaryKey>>,
pub update_state: IndexMap<PrimaryKey, Row>,
pub table_name: &'static str,
pub pk_phantom: PhantomData<(AvailableTypes, AvailableIndexes)>,
}Fields§
§data: Arc<DataPages<Row, DATA_LENGTH>>§primary_index: Arc<PrimaryIndex<PrimaryKey, DATA_LENGTH, PkNodeType>>§indexes: Arc<SecondaryIndexes>§pk_gen: PkGen§lock_manager: Arc<LockMap<LockType, PrimaryKey>>§update_state: IndexMap<PrimaryKey, Row>§table_name: &'static str§pk_phantom: PhantomData<(AvailableTypes, AvailableIndexes)>Implementations§
Source§impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, NodeType> WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, NodeType>where
PrimaryKey: Debug + Clone + Ord + Send + 'static + Hash,
Row: StorableRow + Send + Clone + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
NodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
SecondaryIndexes: MemStat + TableSecondaryIndexInfo,
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, NodeType> WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, NodeType>where
PrimaryKey: Debug + Clone + Ord + Send + 'static + Hash,
Row: StorableRow + Send + Clone + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
NodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
SecondaryIndexes: MemStat + TableSecondaryIndexInfo,
pub fn system_info(&self) -> SystemInfo
Source§impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>where
Row: TableRow<PrimaryKey> + StorableRow + Send + Clone + 'static,
PrimaryKey: Debug + Clone + Ord + Send + TablePrimaryKey + Hash,
PkNodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>where
Row: TableRow<PrimaryKey> + StorableRow + Send + Clone + 'static,
PrimaryKey: Debug + Clone + Ord + Send + TablePrimaryKey + Hash,
PkNodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
pub fn get_next_pk(&self) -> PrimaryKeywhere
PkGen: PrimaryKeyGenerator<PrimaryKey>,
Sourcepub fn select(&self, pk: PrimaryKey) -> Option<Row>where
LockType: 'static,
Row: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: Deserialize<<Row as StorableRow>::WrappedRow, HighDeserializer<Error>>,
pub fn select(&self, pk: PrimaryKey) -> Option<Row>where
LockType: 'static,
Row: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: Deserialize<<Row as StorableRow>::WrappedRow, HighDeserializer<Error>>,
Selects Row from table identified with provided primary key. Returns None if no value presented.
pub fn insert(&self, row: Row) -> Result<PrimaryKey, WorkTableError>where
Row: Archive + Clone + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<Row as StorableRow>::WrappedRow: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: ArchivedRowWrapper,
PrimaryKey: Clone,
AvailableTypes: 'static,
AvailableIndexes: AvailableIndex,
SecondaryIndexes: TableSecondaryIndex<Row, AvailableTypes, AvailableIndexes>,
LockType: 'static,
pub fn insert_cdc<SecondaryEvents>(
&self,
row: Row,
) -> Result<(PrimaryKey, Operation<<PkGen as PrimaryKeyGeneratorState>::State, PrimaryKey, SecondaryEvents>), WorkTableError>where
Row: Archive + Clone + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<Row as StorableRow>::WrappedRow: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: ArchivedRowWrapper,
PrimaryKey: Clone,
SecondaryIndexes: TableSecondaryIndex<Row, AvailableTypes, AvailableIndexes> + TableSecondaryIndexCdc<Row, AvailableTypes, SecondaryEvents, AvailableIndexes>,
PkGen: PrimaryKeyGeneratorState,
AvailableIndexes: Debug + AvailableIndex,
Sourcepub async fn reinsert(
&self,
row_old: Row,
row_new: Row,
) -> Result<PrimaryKey, WorkTableError>where
Row: Archive + Clone + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<Row as StorableRow>::WrappedRow: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: ArchivedRowWrapper,
PrimaryKey: Clone,
AvailableTypes: 'static,
AvailableIndexes: Debug + AvailableIndex,
SecondaryIndexes: TableSecondaryIndex<Row, AvailableTypes, AvailableIndexes>,
LockType: 'static,
pub async fn reinsert(
&self,
row_old: Row,
row_new: Row,
) -> Result<PrimaryKey, WorkTableError>where
Row: Archive + Clone + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<Row as StorableRow>::WrappedRow: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: ArchivedRowWrapper,
PrimaryKey: Clone,
AvailableTypes: 'static,
AvailableIndexes: Debug + AvailableIndex,
SecondaryIndexes: TableSecondaryIndex<Row, AvailableTypes, AvailableIndexes>,
LockType: 'static,
Reinserts provided row with updating indexes and saving it’s data in new place. Is used to not delete and insert because this situation causes a possible gap when row doesn’t exist.
For reinsert it’s ok that part of indexes will lead to old row and other
part is for new row. Goal is to make PrimaryKey of the row always
acceptable. As for reinsert PrimaryKey will be same for both old and
new Link’s, goal will be achieved.
pub fn reinsert_cdc<SecondaryEvents>(
&self,
row_old: Row,
row_new: Row,
) -> Result<(PrimaryKey, Operation<<PkGen as PrimaryKeyGeneratorState>::State, PrimaryKey, SecondaryEvents>), WorkTableError>where
Row: Archive + Clone + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<Row as StorableRow>::WrappedRow: Archive + for<'a> Serialize<Strategy<Serializer<AlignedVec, ArenaHandle<'a>, Share>, Error>>,
<<Row as StorableRow>::WrappedRow as Archive>::Archived: ArchivedRowWrapper,
PrimaryKey: Clone,
SecondaryIndexes: TableSecondaryIndex<Row, AvailableTypes, AvailableIndexes> + TableSecondaryIndexCdc<Row, AvailableTypes, SecondaryEvents, AvailableIndexes>,
PkGen: PrimaryKeyGeneratorState,
AvailableIndexes: Debug + AvailableIndex,
Trait Implementations§
Source§impl<Row, PrimaryKey, AvailableTypes: Debug, AvailableIndexes: Debug, SecondaryIndexes: Debug, LockType: Debug, PkGen: Debug, const DATA_LENGTH: usize, PkNodeType> Debug for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes: Debug, AvailableIndexes: Debug, SecondaryIndexes: Debug, LockType: Debug, PkGen: Debug, const DATA_LENGTH: usize, PkNodeType> Debug for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
Source§impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> Default for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>where
PrimaryKey: Debug + Clone + Ord + Send + TablePrimaryKey + Hash,
SecondaryIndexes: Default,
PkGen: Default,
PkNodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
Row: StorableRow + Send + Clone + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> Default for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>where
PrimaryKey: Debug + Clone + Ord + Send + TablePrimaryKey + Hash,
SecondaryIndexes: Default,
PkGen: Default,
PkNodeType: NodeLike<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>> + Send + 'static,
Row: StorableRow + Send + Clone + 'static,
<Row as StorableRow>::WrappedRow: RowWrapper<Row>,
Auto Trait Implementations§
impl<Row, PrimaryKey, AvailableTypes = (), AvailableIndexes = (), SecondaryIndexes = (), LockType = (), PkGen = <PrimaryKey as TablePrimaryKey>::Generator, const DATA_LENGTH: usize = INNER_PAGE_SIZE, PkNodeType = Vec<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>>> !Freeze for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes = (), AvailableIndexes = (), SecondaryIndexes = (), LockType = (), PkGen = <PrimaryKey as TablePrimaryKey>::Generator, const DATA_LENGTH: usize = INNER_PAGE_SIZE, PkNodeType = Vec<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>>> !RefUnwindSafe for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> Send for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> Sync for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, const DATA_LENGTH: usize, PkNodeType> Unpin for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
impl<Row, PrimaryKey, AvailableTypes = (), AvailableIndexes = (), SecondaryIndexes = (), LockType = (), PkGen = <PrimaryKey as TablePrimaryKey>::Generator, const DATA_LENGTH: usize = INNER_PAGE_SIZE, PkNodeType = Vec<Pair<PrimaryKey, OffsetEqLink<DATA_LENGTH>>>> !UnwindSafe for WorkTable<Row, PrimaryKey, AvailableTypes, AvailableIndexes, SecondaryIndexes, LockType, PkGen, DATA_LENGTH, PkNodeType>
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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
Mutably borrows from an owned value. Read more
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.