Struct backend::schema::temporal_relation::columns::plant_earlier
source · pub struct plant_earlier;
Trait Implementations§
source§impl<Rhs> Add<Rhs> for plant_earlierwhere
Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Add>::Rhs>,
impl<Rhs> Add<Rhs> for plant_earlierwhere Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Add>::Rhs>,
§type Output = Add<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Add>::Rhs>>::Expression>
type Output = Add<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Add>::Rhs>>::Expression>
The resulting type after applying the
+
operator.source§impl AppearsInFromClause<Only<table>> for plant_earlier
impl AppearsInFromClause<Only<table>> for plant_earlier
source§impl Clone for plant_earlier
impl Clone for plant_earlier
source§fn clone(&self) -> plant_earlier
fn clone(&self) -> plant_earlier
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Column for plant_earlier
impl Column for plant_earlier
source§impl Debug for plant_earlier
impl Debug for plant_earlier
source§impl Default for plant_earlier
impl Default for plant_earlier
source§fn default() -> plant_earlier
fn default() -> plant_earlier
Returns the “default value” for a type. Read more
source§impl<Rhs> Div<Rhs> for plant_earlierwhere
Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Div>::Rhs>,
impl<Rhs> Div<Rhs> for plant_earlierwhere Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Div>::Rhs>,
§type Output = Div<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Div>::Rhs>>::Expression>
type Output = Div<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Div>::Rhs>>::Expression>
The resulting type after applying the
/
operator.source§impl Expression for plant_earlier
impl Expression for plant_earlier
source§impl<Rhs> Mul<Rhs> for plant_earlierwhere
Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Mul>::Rhs>,
impl<Rhs> Mul<Rhs> for plant_earlierwhere Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Mul>::Rhs>,
§type Output = Mul<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Mul>::Rhs>>::Expression>
type Output = Mul<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Mul>::Rhs>>::Expression>
The resulting type after applying the
*
operator.source§impl<DB> QueryFragment<DB, NotSpecialized> for plant_earlierwhere
DB: Backend,
StaticQueryFragmentInstance<table>: QueryFragment<DB>,
impl<DB> QueryFragment<DB, NotSpecialized> for plant_earlierwhere DB: Backend, StaticQueryFragmentInstance<table>: QueryFragment<DB>,
source§fn walk_ast<'b>(
&'b self,
__diesel_internal_out: AstPass<'_, 'b, DB>
) -> QueryResult<()>
fn walk_ast<'b>( &'b self, __diesel_internal_out: AstPass<'_, 'b, DB> ) -> QueryResult<()>
Walk over this
QueryFragment
for all passes. Read moresource§fn to_sql(
&self,
out: &mut <DB as Backend>::QueryBuilder,
backend: &DB
) -> Result<(), Error>
fn to_sql( &self, out: &mut <DB as Backend>::QueryBuilder, backend: &DB ) -> Result<(), Error>
Converts this
QueryFragment
to its SQL representation. Read moresource§fn collect_binds<'b>(
&'b self,
out: &mut <DB as HasBindCollector<'b>>::BindCollector,
metadata_lookup: &mut <DB as TypeMetadata>::MetadataLookup,
backend: &'b DB
) -> Result<(), Error>
fn collect_binds<'b>( &'b self, out: &mut <DB as HasBindCollector<'b>>::BindCollector, metadata_lookup: &mut <DB as TypeMetadata>::MetadataLookup, backend: &'b DB ) -> Result<(), Error>
Serializes all bind parameters in this query. Read more
source§impl QueryId for plant_earlier
impl QueryId for plant_earlier
§type QueryId = plant_earlier
type QueryId = plant_earlier
A type which uniquely represents
Self
in a SQL query. Read moresource§const HAS_STATIC_QUERY_ID: bool = true
const HAS_STATIC_QUERY_ID: bool = true
Can the SQL generated by
Self
be uniquely identified by its type? Read moresource§impl<Rhs> Sub<Rhs> for plant_earlierwhere
Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Sub>::Rhs>,
impl<Rhs> Sub<Rhs> for plant_earlierwhere Rhs: AsExpression<<<plant_earlier as Expression>::SqlType as Sub>::Rhs>,
§type Output = Sub<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Sub>::Rhs>>::Expression>
type Output = Sub<plant_earlier, <Rhs as AsExpression<<<plant_earlier as Expression>::SqlType as Sub>::Rhs>>::Expression>
The resulting type after applying the
-
operator.source§impl ValidGrouping<()> for plant_earlier
impl ValidGrouping<()> for plant_earlier
§type IsAggregate = No
type IsAggregate = No
Is this expression aggregate? Read more
source§impl<__GB> ValidGrouping<__GB> for plant_earlierwhere
__GB: IsContainedInGroupBy<plant_earlier, Output = Yes>,
impl<__GB> ValidGrouping<__GB> for plant_earlierwhere __GB: IsContainedInGroupBy<plant_earlier, Output = Yes>,
§type IsAggregate = Yes
type IsAggregate = Yes
Is this expression aggregate? Read more
impl<QS> AppearsOnTable<QS> for plant_earlierwhere QS: AppearsInFromClause<table, Count = Once>,
impl Copy for plant_earlier
impl SelectableExpression<Only<table>> for plant_earlier
impl SelectableExpression<table> for plant_earlier
Auto Trait Implementations§
impl RefUnwindSafe for plant_earlier
impl Send for plant_earlier
impl Sync for plant_earlier
impl Unpin for plant_earlier
impl UnwindSafe for plant_earlier
Blanket Implementations§
source§impl<T, ST> AsExpression<ST> for Twhere
T: Expression<SqlType = ST>,
ST: SqlType + TypedExpressionType,
impl<T, ST> AsExpression<ST> for Twhere T: Expression<SqlType = ST>, ST: SqlType + TypedExpressionType,
§type Expression = T
type Expression = T
The expression being returned
source§fn as_expression(self) -> T
fn as_expression(self) -> T
Perform the conversion
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<Conn, DB, T> ExecuteDsl<Conn, DB> for Twhere
Conn: AsyncConnection<Backend = DB>,
DB: Backend,
T: QueryFragment<DB, NotSpecialized> + QueryId + Send,
impl<Conn, DB, T> ExecuteDsl<Conn, DB> for Twhere Conn: AsyncConnection<Backend = DB>, DB: Backend, T: QueryFragment<DB, NotSpecialized> + QueryId + Send,
source§fn execute<'query, 'conn>(
query: T,
conn: &'conn mut Conn
) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>where
T: 'query,
fn execute<'query, 'conn>( query: T, conn: &'conn mut Conn ) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>where T: 'query,
Execute this command
source§impl<Conn, DB, T> ExecuteDsl<Conn, DB> for Twhere
Conn: Connection<Backend = DB>,
DB: Backend,
T: QueryFragment<DB, NotSpecialized> + QueryId,
impl<Conn, DB, T> ExecuteDsl<Conn, DB> for Twhere Conn: Connection<Backend = DB>, DB: Backend, T: QueryFragment<DB, NotSpecialized> + QueryId,
source§impl<T> ExpressionMethods for Twhere
T: Expression,
<T as Expression>::SqlType: SingleValue,
impl<T> ExpressionMethods for Twhere T: Expression, <T as Expression>::SqlType: SingleValue,
source§fn eq<T>(
self,
other: T
) -> Grouped<Eq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn eq<T>( self, other: T ) -> Grouped<Eq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
=
expression. Read moresource§fn ne<T>(
self,
other: T
) -> Grouped<NotEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn ne<T>( self, other: T ) -> Grouped<NotEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
!=
expression. Read moresource§fn eq_any<T>(
self,
values: T
) -> Grouped<In<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>where
Self::SqlType: SqlType,
T: AsInExpression<Self::SqlType>,
fn eq_any<T>( self, values: T ) -> Grouped<In<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>where Self::SqlType: SqlType, T: AsInExpression<Self::SqlType>,
Creates a SQL
IN
statement. Read moresource§fn ne_all<T>(
self,
values: T
) -> Grouped<NotIn<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>where
Self::SqlType: SqlType,
T: AsInExpression<Self::SqlType>,
fn ne_all<T>( self, values: T ) -> Grouped<NotIn<Self, <T as AsInExpression<Self::SqlType>>::InExpression>>where Self::SqlType: SqlType, T: AsInExpression<Self::SqlType>,
Creates a SQL
NOT IN
statement. Read moresource§fn is_not_null(self) -> Grouped<IsNotNull<Self>>
fn is_not_null(self) -> Grouped<IsNotNull<Self>>
Creates a SQL
IS NOT NULL
expression. Read moresource§fn gt<T>(
self,
other: T
) -> Grouped<Gt<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn gt<T>( self, other: T ) -> Grouped<Gt<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
>
expression. Read moresource§fn ge<T>(
self,
other: T
) -> Grouped<GtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn ge<T>( self, other: T ) -> Grouped<GtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
>=
expression. Read moresource§fn lt<T>(
self,
other: T
) -> Grouped<Lt<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn lt<T>( self, other: T ) -> Grouped<Lt<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
<
expression. Read moresource§fn le<T>(
self,
other: T
) -> Grouped<LtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn le<T>( self, other: T ) -> Grouped<LtEq<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a SQL
<=
expression. Read moresource§fn between<T, U>(
self,
lower: T,
upper: U
) -> Grouped<Between<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
U: AsExpression<Self::SqlType>,
fn between<T, U>( self, lower: T, upper: U ) -> Grouped<Between<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>, U: AsExpression<Self::SqlType>,
Creates a SQL
BETWEEN
expression using the given lower and upper
bounds. Read moresource§fn not_between<T, U>(
self,
lower: T,
upper: U
) -> Grouped<NotBetween<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
U: AsExpression<Self::SqlType>,
fn not_between<T, U>( self, lower: T, upper: U ) -> Grouped<NotBetween<Self, And<<T as AsExpression<Self::SqlType>>::Expression, <U as AsExpression<Self::SqlType>>::Expression>>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>, U: AsExpression<Self::SqlType>,
Creates a SQL
NOT BETWEEN
expression using the given lower and upper
bounds. Read moresource§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> IntoSql for T
impl<T> IntoSql for T
source§fn into_sql<T>(self) -> Self::Expressionwhere
Self: AsExpression<T> + Sized,
T: SqlType + TypedExpressionType,
fn into_sql<T>(self) -> Self::Expressionwhere Self: AsExpression<T> + Sized, T: SqlType + TypedExpressionType,
Convert
self
to an expression for Diesel’s query builder. Read moresource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expressionwhere
&'a Self: AsExpression<T>,
T: SqlType + TypedExpressionType,
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expressionwhere &'a Self: AsExpression<T>, T: SqlType + TypedExpressionType,
Convert
&self
to an expression for Diesel’s query builder. Read moresource§impl<T> NullableExpressionMethods for Twhere
T: Expression,
impl<T> NullableExpressionMethods for Twhere T: Expression,
source§fn nullable(self) -> Nullable<Self>
fn nullable(self) -> Nullable<Self>
Converts this potentially non-null expression into one which is treated
as nullable. This method has no impact on the generated SQL, and is only
used to allow certain comparisons that would otherwise fail to compile. Read more
source§fn assume_not_null(self) -> AssumeNotNull<Self>
fn assume_not_null(self) -> AssumeNotNull<Self>
Converts this potentially nullable expression into one which will be assumed
to be not-null. This method has no impact on the generated SQL, however it will
enable you to attempt deserialization of the returned value in a non-
Option
. Read moresource§impl<T> PgExpressionMethods for Twhere
T: Expression,
impl<T> PgExpressionMethods for Twhere T: Expression,
source§fn is_not_distinct_from<T>(
self,
other: T
) -> Grouped<IsNotDistinctFrom<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn is_not_distinct_from<T>( self, other: T ) -> Grouped<IsNotDistinctFrom<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a PostgreSQL
IS NOT DISTINCT FROM
expression. Read moresource§fn is_distinct_from<T>(
self,
other: T
) -> Grouped<IsDistinctFrom<Self, <T as AsExpression<Self::SqlType>>::Expression>>where
Self::SqlType: SqlType,
T: AsExpression<Self::SqlType>,
fn is_distinct_from<T>( self, other: T ) -> Grouped<IsDistinctFrom<Self, <T as AsExpression<Self::SqlType>>::Expression>>where Self::SqlType: SqlType, T: AsExpression<Self::SqlType>,
Creates a PostgreSQL
IS DISTINCT FROM
expression. Read moresource§impl<T> PgTrgmExpressionMethods for Twhere
T: Expression,
impl<T> PgTrgmExpressionMethods for Twhere T: Expression,
source§fn fuzzy<U>(self, right: U) -> PgTrgmFuzzy<Self, U::Expression>where
Self::SqlType: SqlType,
U: AsExpression<Self::SqlType>,
fn fuzzy<U>(self, right: U) -> PgTrgmFuzzy<Self, U::Expression>where Self::SqlType: SqlType, U: AsExpression<Self::SqlType>,
source§impl<T, Conn> RunQueryDsl<Conn> for T
impl<T, Conn> RunQueryDsl<Conn> for T
source§fn execute<'query, 'conn>(
self,
conn: &'conn mut Conn
) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>where
Conn: AsyncConnection + Send,
Self: ExecuteDsl<Conn, <Conn as AsyncConnection>::Backend> + 'query,
fn execute<'query, 'conn>( self, conn: &'conn mut Conn ) -> <Conn as AsyncConnection>::ExecuteFuture<'conn, 'query>where Conn: AsyncConnection + Send, Self: ExecuteDsl<Conn, <Conn as AsyncConnection>::Backend> + 'query,
Executes the given command, returning the number of rows affected. Read more
source§fn load<'query, U, 'conn>(
self,
conn: &'conn mut Conn
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U, Global>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U, Global>>>where
U: Send,
Conn: AsyncConnection,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load<'query, U, 'conn>( self, conn: &'conn mut Conn ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U, Global>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U, Global>>>where U: Send, Conn: AsyncConnection, Self: LoadQuery<'query, Conn, U> + 'query,
source§fn load_stream<'conn, 'query, U>(
self,
conn: &'conn mut Conn
) -> Self::LoadFuture<'conn>where
Conn: AsyncConnection,
U: 'conn,
Self: LoadQuery<'query, Conn, U> + 'query,
fn load_stream<'conn, 'query, U>( self, conn: &'conn mut Conn ) -> Self::LoadFuture<'conn>where Conn: AsyncConnection, U: 'conn, Self: LoadQuery<'query, Conn, U> + 'query,
source§fn get_result<'query, 'conn, U>(
self,
conn: &'conn mut Conn
) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>, Global>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>, Global>>)) -> Result<U, Error>>>where
U: Send + 'conn,
Conn: AsyncConnection,
Self: LoadQuery<'query, Conn, U> + 'query,
fn get_result<'query, 'conn, U>( self, conn: &'conn mut Conn ) -> AndThen<Self::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<Self::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>, Global>>)) -> Result<U, Error>>, fn(_: Self::Stream<'conn>) -> Map<StreamFuture<Pin<Box<Self::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<Self::Stream<'conn>, Global>>)) -> Result<U, Error>>>where U: Send + 'conn, Conn: AsyncConnection, Self: LoadQuery<'query, Conn, U> + 'query,
Runs the command, and returns the affected row. Read more
source§fn get_results<'query, U, 'conn>(
self,
conn: &'conn mut Conn
) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U, Global>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U, Global>>>where
U: Send,
Conn: AsyncConnection,
Self: LoadQuery<'query, Conn, U> + 'query,
fn get_results<'query, U, 'conn>( self, conn: &'conn mut Conn ) -> AndThen<Self::LoadFuture<'conn>, TryCollect<Self::Stream<'conn>, Vec<U, Global>>, fn(_: Self::Stream<'conn>) -> TryCollect<Self::Stream<'conn>, Vec<U, Global>>>where U: Send, Conn: AsyncConnection, Self: LoadQuery<'query, Conn, U> + 'query,
Runs the command, returning an
Vec
with the affected rows. Read moresource§fn first<'query, 'conn, U>(
self,
conn: &'conn mut Conn
) -> AndThen<<Self::Output as LoadQuery<'query, Conn, U>>::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>)) -> Result<U, Error>>, fn(_: <Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>) -> Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>)) -> Result<U, Error>>>where
U: Send + 'conn,
Conn: AsyncConnection,
Self: LimitDsl,
Self::Output: LoadQuery<'query, Conn, U> + Send + 'query,
fn first<'query, 'conn, U>( self, conn: &'conn mut Conn ) -> AndThen<<Self::Output as LoadQuery<'query, Conn, U>>::LoadFuture<'conn>, Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>)) -> Result<U, Error>>, fn(_: <Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>) -> Map<StreamFuture<Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>>, fn(_: (Option<Result<U, Error>>, Pin<Box<<Self::Output as LoadQuery<'query, Conn, U>>::Stream<'conn>, Global>>)) -> Result<U, Error>>>where U: Send + 'conn, Conn: AsyncConnection, Self: LimitDsl, Self::Output: LoadQuery<'query, Conn, U> + Send + 'query,
Attempts to load a single record. Read more