#[cfg(feature = "postgresql")]
use crate::behavior::ConcatPostgres;
use crate::{
behavior::{concat_raw_before_after, Concat, ConcatSqlStandard},
fmt,
structure::{Update, UpdateClause},
};
impl<'a> ConcatSqlStandard<'a, UpdateClause> for Update<'_> {}
#[cfg(feature = "postgresql")]
impl<'a> ConcatPostgres<'a, UpdateClause> for Update<'_> {}
impl Update<'_> {
fn concat_set(&self, query: String, fmts: &fmt::Formatter) -> String {
let fmt::Formatter { comma, lb, space, .. } = fmts;
let sql = if self._set.is_empty() == false {
let values = self._set.join(comma);
format!("SET{space}{values}{space}{lb}")
} else {
"".to_owned()
};
concat_raw_before_after(&self._raw_before, &self._raw_after, query, fmts, UpdateClause::Set, sql)
}
fn concat_update(&self, query: String, fmts: &fmt::Formatter) -> String {
let fmt::Formatter { lb, space, .. } = fmts;
let sql = if self._update.is_empty() == false {
let table_name = self._update;
format!("UPDATE{space}{table_name}{space}{lb}")
} else {
"".to_owned()
};
concat_raw_before_after(
&self._raw_before,
&self._raw_after,
query,
fmts,
UpdateClause::Update,
sql,
)
}
}
impl Concat for Update<'_> {
fn concat(&self, fmts: &fmt::Formatter) -> String {
let mut query = "".to_owned();
query = self.concat_raw(query, &fmts, &self._raw);
#[cfg(feature = "postgresql")]
{
query = self.concat_with(
&self._raw_before,
&self._raw_after,
query,
&fmts,
UpdateClause::With,
&self._with,
);
}
query = self.concat_update(query, &fmts);
query = self.concat_set(query, &fmts);
#[cfg(feature = "postgresql")]
{
query = self.concat_from(
&self._raw_before,
&self._raw_after,
query,
&fmts,
UpdateClause::From,
&self._from,
);
}
query = self.concat_where(
&self._raw_before,
&self._raw_after,
query,
&fmts,
UpdateClause::Where,
&self._where,
);
#[cfg(feature = "postgresql")]
{
query = self.concat_returning(
&self._raw_before,
&self._raw_after,
query,
&fmts,
UpdateClause::Returning,
&self._returning,
);
}
query.trim_end().to_owned()
}
}