Struct elephantry::transaction::Transaction
source · pub struct Transaction<'c> { /* private fields */ }
Expand description
This struct
is created by the Connection::transaction
method.
Implementations§
source§impl<'c> Transaction<'c>
impl<'c> Transaction<'c>
sourcepub fn start(&self) -> Result
pub fn start(&self) -> Result
Start a new transaction.
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
pub fn new_employee(
&self,
employee: &Entity,
department: &str,
) -> elephantry::Result<Entity> {
let transaction = self.connection.transaction();
transaction.start()?;
transaction.set_deferrable(
Some(vec!["employee_department_id_fkey"]),
elephantry::transaction::Constraints::Deferred,
)?;
let mut employee = self.connection.insert_one::<Self>(employee)?;
let department = self
.connection
.find_where::<super::department::Model>("name = $*", &[&department], None)?
.nth(0)
.unwrap();
employee.department_id = department.department_id;
let employee = self
.connection
.update_one::<Self>(
&elephantry::pk! { employee_id => employee.employee_id },
&employee,
)?
.unwrap();
transaction.commit()?;
Ok(employee)
}
sourcepub fn commit(&self) -> Result
pub fn commit(&self) -> Result
Commit a transaction.
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
pub fn new_employee(
&self,
employee: &Entity,
department: &str,
) -> elephantry::Result<Entity> {
let transaction = self.connection.transaction();
transaction.start()?;
transaction.set_deferrable(
Some(vec!["employee_department_id_fkey"]),
elephantry::transaction::Constraints::Deferred,
)?;
let mut employee = self.connection.insert_one::<Self>(employee)?;
let department = self
.connection
.find_where::<super::department::Model>("name = $*", &[&department], None)?
.nth(0)
.unwrap();
employee.department_id = department.department_id;
let employee = self
.connection
.update_one::<Self>(
&elephantry::pk! { employee_id => employee.employee_id },
&employee,
)?
.unwrap();
transaction.commit()?;
Ok(employee)
}
sourcepub fn roolback(&self, name: Option<&str>) -> Result
pub fn roolback(&self, name: Option<&str>) -> Result
Rollback a transaction. If a name
is specified, the transaction is
rollback to the given savepoint. Otherwise, the whole transaction is
rollback.
sourcepub fn set_save_point(&self, name: &str) -> Result
pub fn set_save_point(&self, name: &str) -> Result
Set a savepoint in a transaction.
sourcepub fn release_savepoint(&self, name: &str) -> Result
pub fn release_savepoint(&self, name: &str) -> Result
Drop a savepoint.
sourcepub fn is_in_transaction(&self) -> Result<bool>
pub fn is_in_transaction(&self) -> Result<bool>
Tell if a transaction is open or not.
sourcepub fn is_transaction_ok(&self) -> Result<Option<bool>>
pub fn is_transaction_ok(&self) -> Result<Option<bool>>
In PostgreSQL, an error during a transaction cancels all the queries and
rollback the transaction on commit. This method returns the current
transaction’s status. If no transactions are open, it returns None
.
sourcepub fn set_deferrable(
&self,
keys: Option<Vec<&str>>,
constraints: Constraints
) -> Result
pub fn set_deferrable( &self, keys: Option<Vec<&str>>, constraints: Constraints ) -> Result
Set given constraints to deferred/immediate in the current transaction.
This applies to constraints being deferrable or deferred by default.
If the keys is None
, ALL keys will be set at the given state.
See http://www.postgresql.org/docs/current/sql-set-constraints.html
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
pub fn new_employee(
&self,
employee: &Entity,
department: &str,
) -> elephantry::Result<Entity> {
let transaction = self.connection.transaction();
transaction.start()?;
transaction.set_deferrable(
Some(vec!["employee_department_id_fkey"]),
elephantry::transaction::Constraints::Deferred,
)?;
let mut employee = self.connection.insert_one::<Self>(employee)?;
let department = self
.connection
.find_where::<super::department::Model>("name = $*", &[&department], None)?
.nth(0)
.unwrap();
employee.department_id = department.department_id;
let employee = self
.connection
.update_one::<Self>(
&elephantry::pk! { employee_id => employee.employee_id },
&employee,
)?
.unwrap();
transaction.commit()?;
Ok(employee)
}
sourcepub fn set_isolation_level(&self, level: IsolationLevel) -> Result
pub fn set_isolation_level(&self, level: IsolationLevel) -> Result
Transaction isolation level tells PostgreSQL how to manage with the current transaction. The default is “READ COMMITTED”.
See http://www.postgresql.org/docs/current/sql-set-transaction.html
sourcepub fn set_access_mode(&self, mode: AccessMode) -> Result
pub fn set_access_mode(&self, mode: AccessMode) -> Result
Transaction access modes tell PostgreSQL if transaction are able to write or read only.
See http://www.postgresql.org/docs/current/sql-set-transaction.html
Auto Trait Implementations§
impl<'c> Freeze for Transaction<'c>
impl<'c> RefUnwindSafe for Transaction<'c>
impl<'c> Send for Transaction<'c>
impl<'c> Sync for Transaction<'c>
impl<'c> Unpin for Transaction<'c>
impl<'c> UnwindSafe for Transaction<'c>
Blanket Implementations§
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
source§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> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.bright_black());
source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.bright_green());
source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.bright_yellow());
source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.bright_magenta());
source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.bright_white());
source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.on_bright_black());
source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.on_bright_green());
source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.on_bright_yellow());
source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
§Example
println!("{}", value.on_bright_blue());
source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.on_bright_magenta());
source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
§Example
println!("{}", value.on_bright_cyan());
source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.on_bright_white());
source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
source§fn underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
§Example
println!("{}", value.underline());
source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
§Example
println!("{}", value.rapid_blink());
source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);