pub trait Entity {
type PrimaryKey<'a>
where Self: 'a;
Show 19 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_values(&self) -> RowValues;
fn from_row(row: Row) -> Result<Self>
where Self: Sized;
// Provided methods
fn row(&self) -> Row { ... }
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>>> + Send { ... }
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_values(&self) -> RowValues
fn row_values(&self) -> RowValues
Full row representation including all persisted columns.
Provided Methods§
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>>> + Send
fn prepare_find<Exec: Executor>( executor: &mut Exec, condition: impl Expression, limit: Option<u32>, ) -> impl Future<Output = Result<Query<Exec::Driver>>> + Send
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".