pub trait Entity {
type PrimaryKey<'a>
where Self: 'a;
Show 20 methods
// Required methods
fn table() -> &'static TableRef;
fn columns() -> &'static [ColumnDef];
fn primary_key_def() -> &'static [&'static ColumnDef];
fn primary_key(&self) -> Self::PrimaryKey<'_>;
fn primary_key_expr(&self) -> impl Expression;
fn unique_defs( ) -> impl ExactSizeIterator<Item = impl ExactSizeIterator<Item = &'static ColumnDef>>;
fn row_filtered(&self) -> Box<[(&'static str, Value)]>;
fn row_full(&self) -> Row;
fn from_row(row: RowLabeled) -> Result<Self>
where Self: Sized;
// Provided methods
fn row_labeled(&self) -> RowLabeled { ... }
fn create_table(
executor: &mut impl Executor,
if_not_exists: bool,
create_schema: bool,
) -> impl Future<Output = Result<()>> + Send
where Self: Sized { ... }
fn drop_table(
executor: &mut impl Executor,
if_exists: bool,
drop_schema: bool,
) -> impl Future<Output = Result<()>> + Send
where Self: Sized { ... }
fn insert_one(
executor: &mut impl Executor,
entity: &impl Entity,
) -> impl Future<Output = Result<RowsAffected>> + Send { ... }
fn insert_many<'a, It>(
executor: &mut impl Executor,
items: It,
) -> impl Future<Output = Result<RowsAffected>> + Send
where Self: Sized + 'a,
It: IntoIterator<Item = &'a Self> + Send,
<It as IntoIterator>::IntoIter: Send { ... }
fn prepare_find<Exec: Executor>(
executor: &mut Exec,
condition: impl Expression,
limit: Option<u32>,
) -> impl Future<Output = Result<Query<Exec::Driver>>> { ... }
fn find_one(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<Option<Self>>> + Send
where Self: Sized { ... }
fn find_many(
executor: &mut impl Executor,
condition: impl Expression,
limit: Option<u32>,
) -> impl Stream<Item = Result<Self>> + Send
where Self: Sized { ... }
fn delete_many(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<RowsAffected>> + Send
where Self: Sized { ... }
fn save(
&self,
executor: &mut impl Executor,
) -> impl Future<Output = Result<()>> + Send
where Self: Sized { ... }
fn delete(
&self,
executor: &mut impl Executor,
) -> impl Future<Output = Result<()>> + Send
where Self: Sized { ... }
}Expand description
Database entity mapping.
Use #[derive(Entity)] to implement this trait.
Required Associated Types§
Sourcetype PrimaryKey<'a>
where
Self: 'a
type PrimaryKey<'a> where Self: 'a
Primary key type. A tuple of field types (or single type) forming the PK.
Required Methods§
Sourcefn primary_key_def() -> &'static [&'static ColumnDef]
fn primary_key_def() -> &'static [&'static ColumnDef]
Primary key column definitions. Empty if no PK defined.
Sourcefn primary_key(&self) -> Self::PrimaryKey<'_>
fn primary_key(&self) -> Self::PrimaryKey<'_>
Extract PK value(s) from self.
Sourcefn primary_key_expr(&self) -> impl Expression
fn primary_key_expr(&self) -> impl Expression
Build an expression matching the PK of self.
Sourcefn unique_defs() -> impl ExactSizeIterator<Item = impl ExactSizeIterator<Item = &'static ColumnDef>>
fn unique_defs() -> impl ExactSizeIterator<Item = impl ExactSizeIterator<Item = &'static ColumnDef>>
Unique constraint definitions.
Sourcefn row_filtered(&self) -> Box<[(&'static str, Value)]>
fn row_filtered(&self) -> Box<[(&'static str, Value)]>
Column name-value pairs for persistence (excludes ignored/default fields).
Sourcefn from_row(row: RowLabeled) -> Result<Self>where
Self: Sized,
fn from_row(row: RowLabeled) -> Result<Self>where
Self: Sized,
Reconstruct Self from a labeled row.
Fails if columns are missing or type conversion fails.
Provided Methods§
Sourcefn row_labeled(&self) -> RowLabeled
fn row_labeled(&self) -> RowLabeled
Full row representation with column labels.
Sourcefn create_table(
executor: &mut impl Executor,
if_not_exists: bool,
create_schema: bool,
) -> impl Future<Output = Result<()>> + Sendwhere
Self: Sized,
fn create_table(
executor: &mut impl Executor,
if_not_exists: bool,
create_schema: bool,
) -> impl Future<Output = Result<()>> + Sendwhere
Self: Sized,
Create table (and optional schema).
if_not_exists: EmitsIF NOT EXISTSif supported.create_schema: Attempts schema creation first.
Sourcefn drop_table(
executor: &mut impl Executor,
if_exists: bool,
drop_schema: bool,
) -> impl Future<Output = Result<()>> + Sendwhere
Self: Sized,
fn drop_table(
executor: &mut impl Executor,
if_exists: bool,
drop_schema: bool,
) -> impl Future<Output = Result<()>> + Sendwhere
Self: Sized,
Drop the table (and optional schema).
if_exists: EmitsIF EXISTSif supported.drop_schema: Drops schema after table removal (if empty).
Sourcefn insert_one(
executor: &mut impl Executor,
entity: &impl Entity,
) -> impl Future<Output = Result<RowsAffected>> + Send
fn insert_one( executor: &mut impl Executor, entity: &impl Entity, ) -> impl Future<Output = Result<RowsAffected>> + Send
Insert a single entity.
Sourcefn insert_many<'a, It>(
executor: &mut impl Executor,
items: It,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized + 'a,
It: IntoIterator<Item = &'a Self> + Send,
<It as IntoIterator>::IntoIter: Send,
fn insert_many<'a, It>(
executor: &mut impl Executor,
items: It,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized + 'a,
It: IntoIterator<Item = &'a Self> + Send,
<It as IntoIterator>::IntoIter: Send,
Bulk insert entities.
Sourcefn prepare_find<Exec: Executor>(
executor: &mut Exec,
condition: impl Expression,
limit: Option<u32>,
) -> impl Future<Output = Result<Query<Exec::Driver>>>
fn prepare_find<Exec: Executor>( executor: &mut Exec, condition: impl Expression, limit: Option<u32>, ) -> impl Future<Output = Result<Query<Exec::Driver>>>
Prepare (but do not yet run) a SQL select query.
Returns the prepared statement.
Sourcefn find_one(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<Option<Self>>> + Sendwhere
Self: Sized,
fn find_one(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<Option<Self>>> + Sendwhere
Self: Sized,
Finds the first entity matching a condition expression.
Returns Ok(None) if no row matches.
Sourcefn find_many(
executor: &mut impl Executor,
condition: impl Expression,
limit: Option<u32>,
) -> impl Stream<Item = Result<Self>> + Sendwhere
Self: Sized,
fn find_many(
executor: &mut impl Executor,
condition: impl Expression,
limit: Option<u32>,
) -> impl Stream<Item = Result<Self>> + Sendwhere
Self: Sized,
Streams entities matching a condition.
limit restricts the maximum number of rows returned at a database level if Some
(if supported by the driver, unlimited otherwise).
Sourcefn delete_many(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized,
fn delete_many(
executor: &mut impl Executor,
condition: impl Expression,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized,
Deletes all entities matching a condition.
Returns the number of deleted rows.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.