pub trait Entity {
type PrimaryKey<'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 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;
fn find_pk(
executor: &mut impl Executor,
primary_key: &Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<Option<Self>>> + Send
where Self: Sized;
fn delete_one(
executor: &mut impl Executor,
primary_key: Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<RowsAffected>> + Send
where Self: Sized;
// Provided methods
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: 'a + Sized,
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
A table-mapped record with schema and CRUD helpers.
Required Associated Types§
Sourcetype PrimaryKey<'a>
type PrimaryKey<'a>
Primary key type. Tuple of the types of the fields forming the primary key.
Required Methods§
Sourcefn columns() -> &'static [ColumnDef]
fn columns() -> &'static [ColumnDef]
Returns all declared column definitions in declaration order.
Sourcefn primary_key_def() -> &'static [&'static ColumnDef]
fn primary_key_def() -> &'static [&'static ColumnDef]
Iterator over columns forming the primary key. Empty iterator means no PK.
Sourcefn primary_key(&self) -> Self::PrimaryKey<'_>
fn primary_key(&self) -> Self::PrimaryKey<'_>
Extracts the primary key value(s) from self.
Sourcefn unique_defs() -> impl ExactSizeIterator<Item = impl ExactSizeIterator<Item = &'static ColumnDef>>
fn unique_defs() -> impl ExactSizeIterator<Item = impl ExactSizeIterator<Item = &'static ColumnDef>>
Returns an iterator over unique constraint definitions.
Sourcefn row_filtered(&self) -> Box<[(&'static str, Value)]>
fn row_filtered(&self) -> Box<[(&'static str, Value)]>
Returns a filtered mapping of column name to value, typically excluding auto-generated or default-only columns.
Sourcefn from_row(row: RowLabeled) -> Result<Self>where
Self: Sized,
fn from_row(row: RowLabeled) -> Result<Self>where
Self: Sized,
Constructs Self from a labeled database row.
Error if mandatory columns are missing or type conversion fails.
Sourcefn find_pk(
executor: &mut impl Executor,
primary_key: &Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<Option<Self>>> + Sendwhere
Self: Sized,
fn find_pk(
executor: &mut impl Executor,
primary_key: &Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<Option<Self>>> + Sendwhere
Self: Sized,
Finds an entity by primary key.
Returns Ok(None) if no row matches.
Sourcefn delete_one(
executor: &mut impl Executor,
primary_key: Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized,
fn delete_one(
executor: &mut impl Executor,
primary_key: Self::PrimaryKey<'_>,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: Sized,
Deletes exactly one entity by primary key.
Returns rows affected (0 if not found).
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,
Creates the underlying table (and optionally schema) if requested.
Parameters:
if_not_exists: guards against existing table (if drivers support it, otherwise just create table).create_schema: attempt to create schema prior to table creation (if drivers support it).
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,
Drops the underlying table (and optionally schema) if requested.
Parameters:
if_exists: guards against missing table (if drivers support it, otherwise just drop table).drop_schema: attempt to drop schema after table removal (if drivers support it).
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
Inserts a single entity row.
Returns rows affected (expected: 1 on success).
Sourcefn insert_many<'a, It>(
executor: &mut impl Executor,
items: It,
) -> impl Future<Output = Result<RowsAffected>> + Sendwhere
Self: 'a + Sized,
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: 'a + Sized,
It: IntoIterator<Item = &'a Self> + Send,
<It as IntoIterator>::IntoIter: Send,
Multiple insert for a homogeneous iterator of entities.
Returns the number of rows inserted.
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 rows deleted.
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.